Batch data ingestion

ABSTRACT

The subject technology obtains, at a database system, an ingest request to ingest one or more files into a table of a database. The subject technology, after obtaining the ingest request and prior to the ingesting of the one or more files, persists the one or more files in a file queue that corresponds to the table. The subject technology assigns the one or more files to one or more execution nodes to be ingested into the table. The subject technology operates an ingest puller to poll the file queue. The subject technology ingests, by the one or more execution nodes, the one or more files into one or more micro-partitions of the table via one or more pipes.

CROSS-REFERENCE To RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.16/720,418, filed on Dec. 19, 2019, entitled “BATCH DATA INGESTION INDATABASE SYSTEMS”, which is a continuation of U.S. patent applicationSer. No. 16/201,854, filed Nov. 27, 2018, entitled “BATCH DATA INGESTIONIN DATABASE SYSTEMS”, which claims priority to U.S. Provisional PatentApplication Ser. No. 62/591,118 filed Nov. 27, 2017, entitled “SYSTEMS,METHODS, AND DEVICES FOR BATCH DATA INGESTION,” and the contents of eachare incorporated herein by reference in their entireties for allpurposes.

TECHNICAL FIELD

The present disclosure relates to databases and more particularlyrelates to incremental ingestion of data in a database or table.

BACKGROUND

Databases are widely used for data storage and access in computingapplications. Databases may include one or more tables that include orreference data that can be read, modified, or deleted using queries.Databases can store anywhere from small to extremely large sets of datawithin one or more tables. This data can be accessed by various users inan organization or even be used to service public users, such as via awebsite or an application program interface (API). Both computing andstorage resources, as well as their underlying architecture, can play asignificant role in achieving desirable database performance.

Data may be ingested from a data bucket into one or more tables of adatabase. A variety of systems have been developed, described, and arewidely known for uploading and storing data in a database or table. Forexample, in a shared-disk system, all data is stored on a shared storagedevice that is accessible from all processing nodes in a data cluster.In this type of system, all data changes are written to the sharedstorage device to ensure that all processing nodes in the data clusteraccess a consistent version of the data. As the number of processingnodes increases in a shared-disk system, the shared storage device (andthe communication links between the processing nodes and the sharedstorage device) becomes a bottleneck slowing data read and data writeoperation. This bottleneck is further aggravated with the addition ofmore processing nodes. Thus, existing shared-disk systems have limitedscalability due to this bottleneck problem.

Another existing data storage and retrieval system is referred to as a“shared-nothing architecture.” In this architecture, data is distributedacross multiple processing nodes such that each node stores a subset ofthe data in the entire database. When a new processing node is added orremoved, the shared-nothing architecture must rearrange data across themultiple processing nodes. This rearrangement of data can betime-consuming and disruptive to data read and write operations executedduring the data rearrangement. And, the affinity of data to a particularnode can create “hot spots” on the data cluster for popular data.Further, since each processing node performs also the storage function,this architecture requires at least one processing node to store data.Thus, the shared-nothing architecture fails to store data if allprocessing nodes are removed. Additionally, management of data in ashared-nothing architecture is complex due to the distribution of dataacross many different processing nodes.

Existing systems and methods for data ingestion use a single commandwith a one/nothing statement that may cause files to be lost. Forexample, in existing systems, a file ingestion may fail partway throughingestion of a table and cause all previously ingested data to be lost.Further in conventional data ingest, a user may be required to allocatea warehouse and issue commands, and data updates may not be captureduntil the user has issued a specific command.

The systems and methods described herein provide an improved approach todata storage, data ingesting, and data retrieval that alleviates theabove-identified limitations of existing systems.

BRIEF DESCRIPTION OF THE DRAWINGS

Non-limiting and non-exhaustive implementations of the presentdisclosure are described with reference to the following figures,wherein like reference numerals refer to like or similar partsthroughout the various views unless otherwise specified. Advantages ofthe present disclosure will become better understood with regard to thefollowing description and accompanying drawings where:

FIG. 1 is a block diagram architecture model of a system for automateddata ingestion in accordance with the teachings and principles of thedisclosure;

FIG. 2 is a block diagram of a process of ingesting data in accordancewith the teachings and principles of the disclosure;

FIG. 3 is a block diagram of components of a retrieval and data storagesystem in accordance with the teachings and principles of thedisclosure;

FIG. 4 is a block diagram of an embodiment of a resource manager inaccordance with the teachings and principles of the disclosure;

FIG. 5 is a block diagram of an embodiment of an execution platform inaccordance with the teachings and principles of the disclosure;

FIG. 6 is a block diagram illustrating components of an operatingenvironment in accordance with the teachings and principles of thedisclosure;

FIG. 7 is a block diagram of a batch data ingestion system in accordancewith the teachings and principles of the disclosure;

FIG. 8 is a schematic flow chart diagram of a method for batch dataingestion to a database in accordance with the teachings and principlesof the disclosure; and

FIG. 9 is a block diagram of an example computing device consistent withthe enabling disclosure of the computer processes taught herein.

DETAILED DESCRIPTION

Systems, methods, and devices for batch data ingestion to a database ortable are disclosed. In traditional database systems known in the art,user files may be inserted into a database table by way of a copycommand. This necessitates the use of a running warehouse that isallocated to data ingestion and it is executed as a synchronousoperation. Further in this traditional approach, the use of a databasetable for querying or other operations may be blocked when new data isinserted into the table during the data ingestion operation. Further,any updates made to the table or any new data received from a clientaccount will not be captured by the database until a user again nreissues a copy command to insert the new user file. When data isingested by way of a single command, such as a copy command that ismanually initiated by a user, some or all of the data may be lost if aningestion task fails. In such traditional systems known in the art, adata ingestion operation may fail partway through and thereforenecessitate that the entire data ingestion operation be repeated.

Improved systems, methods, and devices for data ingestion into adatabase are disclosed herein. Such improved systems, methods, anddevices lower the burdens on database systems that arise due to frequentdata loading and simplify the processes for data ingestion for a user ofa client account. In the systems, methods, and devices disclosed herein,data from user files is incrementally committed to micro-partitions of adatabase table such that the data already ingested is not lost even inthe event of a system failure. The data may be partitioned and insertedinto the database partition-by-partition such that, in the event of asystem failure, the ingestion operation may continue from the point whenthe failure occurred.

Additionally, processing resources for the systems, methods, and devicesdisclosed herein may be scaled up or down as needed. As such, awarehouse is not required in the systems as disclosed herein, incontrast with the traditional database ingestion systems known in theart. The systems, methods, and devices disclosed herein provide forasynchronous and serverless data ingestion of user files. Changes madeto a client data bucket, such as one or more new user files being addedto the client data bucket, are detected and such new files areautomatically loaded into an appropriate database table withoutrequiring a specific command from a user of the client account. Further,the target table for data of one or more user files is automaticallydetermined, and such user files are assigned to an appropriate instanceof a resource manager that is assigned to manage the ingestion of newdata into particular tables of the database.

The systems, methods, and devices disclosed herein further includegenerating and maintaining metadata concerning what data and what userfiles have been successfully committed to the database. The metadatafurther indicates, for example, in which micro-partition and in whichtable the data was inserted, whether the data was successfully inserted,when the data was inserted, the size of the data that was inserted, andso forth. Such metadata may be shared across an execution platform andacross a plurality of shared storage devices collectively storingdatabase. The metadata may be stored separately from the plurality ofshared storage devices or it may be stored within the plurality ofshared storage devices. Further the metadata may be stored as a separatemicro-partition within a database table or may be stored within amicro-partition that comprises database data.

In an embodiment of the disclosure, a system for incremental ingest ofdata into a database is disclosed. The system includes means fordetermining a notification indicating a presence of a user file receivedfrom a client account to be ingested into a database. The systemincludes means for identifying data in the user file and means foridentifying a target table of the database to receive the data in theuser file. The system includes means for generating an ingest taskindicating the data and the target table. The system includes means forassigning the ingest task to an execution node of an execution platform,wherein the execution platform comprises a plurality of execution nodesoperating independent of a plurality of shared storage devicescollectively storing database data. The system includes means forregistering metadata concerning the target table in a metadata storeafter the data has been fully committed to the target table by theexecution node.

In an embodiment of the disclosure, a method for batch data ingestioninto a database is disclosed. The method includes determining anotification indicating a presence of a user file received from a clientaccount to be ingested into a database. The method includes identifyingdata in the user file and identifying a target table of the database toreceive the data in the user file. The method includes generating aningest task indicating the data and the target table. The methodincludes assigning the ingest task to an execution node of an executionplatform, wherein the execution platform comprises a plurality ofexecution nodes operating independent of a plurality of shared storagedevices collectively storing database data. The method includesregistering metadata concerning the target table in a metadata storeafter the data has been fully committed to the target table by theexecution node. In an embodiment, the method is performed by a resourcemanager (see e.g. 302) of a database system.

A database table may store data in a plurality of micro-partitions,wherein the micro-partitions are immutable storage devices. When atransaction is executed on a such a table, all impacted micro-partitionsare recreated to generate new micro-partitions that reflect themodifications of the transaction. After a transaction is fully executed,any original micro-partitions that were recreated may then be removedfrom the database. A new version of the table is generated after eachtransaction that is executed on the table. The table may undergo manyversions over a time period if the data in the table undergoes manychanges, such as inserts, deletes, updates, and/or merges. Each versionof the table may include metadata indicating what transaction generatedthe table, when the transaction was ordered, when the transaction wasfully executed, and how the transaction altered one or more rows in thetable. The disclosed systems, methods, and devices for low-cost tableversioning may be leveraged to provide an efficient means for triggeringtasks to be executed on database data in response to a modification madeto the data.

Change tracking information can be stored as metadata in a database.This metadata describes the data that is stored in database tables ofcustomers but is not actually the stored table data. Metadata can getvery large, especially if there are large database tables of manycustomers. Current database systems have severe limitations handlinglarge amounts of metadata. Current database systems store metadata inmutable storage devices and services, including main memory, filesystems, and key-value stores. These devices and services allow themetadata to be updated data in-place. If a data record changes, it maybe updated with the new information and the old information isoverwritten. This allows databases to easily maintain mutable metadataby updating metadata in-place.

However, these mutable storage devices and services have limitations.The limitations are at least two-fold. First, mutable storage devicessuch as main memory and file systems have a hard limit in terms ofstorage capacity. If the size of the metadata exceeds these limits, itis impossible to store more metadata there. Second, mutable storageservices such as key-value stores perform poorly when reading largevolumes of metadata. Reading data is performed using range scans, whichtake a long time to finish. In practice, range scans can take manyminutes or even approach an hour to complete in large scale deployments.

These limitations make it impossible to store large amounts of metadatain existing mutable storage devices and services. Systems, methods, anddevices disclosed herein provide for improved metadata storage andmanagement that includes storing metadata in immutable (non-mutable)storage such as micro-partitions. As used herein, immutable non-mutablestorage includes storage where data cannot or is not permitted to beoverwritten or updated in-place. For example, changes to data that islocated in a cell or region of storage media may be stored as a new filein a different, time-stamped, cell or region of the storage media.Mutable storage may include storage where data is permitted to beoverwritten or updated in-place. For example, data in a given cell orregion of the storage media can be overwritten when there are changes tothe data relevant to that cell or region of the storage media.

In one embodiment, metadata is stored and maintained on non-mutablestorage services in the cloud. These storage services may include, forexample, Amazon S3®, Microsoft Azure Blob Storage®, and Google CloudStorage®. Many of these services do not allow to update data in-place(i.e., are non-mutable or immutable). Data files may only be added ordeleted, but never updated. In one embodiment, storing and maintainingmetadata on these services requires that, for every change in metadata,a metadata file is added to the storage service. These metadata filesmay be periodically consolidated into larger “compacted” or consolidatedmetadata files in the background.

In an embodiment, all data in tables is automatically divided into animmutable storage device referred to as a micro-partition. Themicro-partition may be considered a batch unit where eachmicro-partition has contiguous units of storage. By way of example, eachmicro-partition may contain between 50 MB and 1000 MB of uncompresseddata (note that the actual size in storage may be smaller because datamay be stored compressed). Groups of rows in tables may be mapped intoindividual micro-partitions organized in a columnar fashion. This sizeand structure allow for extremely granular pruning of very large tables,which can be comprised of millions, or even hundreds of millions, ofmicro-partitions. Metadata may be automatically gathered about all rowsstored in a micro-partition, including: the range of values for each ofthe columns in the micro-partition; the number of distinct values;and/or additional properties used for both optimization and efficientquery processing. In one embodiment, micro-partitioning may beautomatically performed on all tables. For example, tables may betransparently partitioned using the ordering that occurs when the datais inserted/loaded.

In an embodiment, file metadata is stored within metadata storage. Thefile metadata contains table versions and information about each tabledata file. The metadata storage may include mutable storage (storagethat can be over written or written in-place), such as a local filesystem, system, memory, or the like. In one embodiment, themicro-partition metadata consists of two data sets: table versions andfile information. The table versions data set includes a mapping oftable versions to lists of added files and removed files. Fileinformation consists of information about each micro-partition,including micro-partition path, micro-partition size, micro-partitionkey id, and summaries of all rows and columns that are stored in themicro-partition, for example. Each modification of the table creates newmicro-partitions and new micro-partition metadata. Inserts into thetable create new micro-partitions. Deletes from the table removemicro-partitions and potentially add new micro-partitions with theremaining rows in a table if not all rows in a micro-partition weredeleted. Updates remove micro-partitions and replace them with newmicro-partitions with rows containing the updated records.

In one embodiment, metadata, including a change tracking column, may bestored in metadata micro-partitions in immutable storage. In oneembodiment, a system may write metadata micro-partitions to cloudstorage for every modification of a database table. In one embodiment, asystem may download and read metadata micro-partitions to compute thescan set. The metadata micro-partitions may be downloaded in paralleland read as they are received to improve scan set computation. In oneembodiment, a system may periodically consolidate metadatamicro-partitions in the background. In one embodiment, performanceimprovements, including pre-fetching, caching, columnar layout and thelike may be included. Furthermore, security improvements, includingencryption and integrity checking, are also possible with metadata fileswith a columnar layout.

Databases may include a plurality of tables that may each furtherinclude immutable storage devices such as micro-partitions. User filesmay be incrementally ingested into a database table in the form ofimmutable micro-partitions such that data in the user file is not lost.Data from one or more user files may be ingested in incremental portionsof data that must be fully and successfully committed to a databasetable before the user file is deemed to have been ingested into thedatabase.

A client account to a database system may provide one or more user filescontaining data. The user file may be committed to a client accountqueue and data may be identified in the user file. The user file may beassigned to an execution node of an execution platform such that theexecution platform may generate a micro-partition or other immutablestorage device to be inserted into the target table of the database thatincludes the data in the user file.

For example, this new system may operate without a customer orthird-party warehouse or server and may simplify data transfer for aclient account. In an embodiment, data ingestion is completedincrementally where files are committed to the database in batches suchthat a system failure does not cause the data to be lost. In anembodiment, the system detects changes to files and automatically loadsthe changes into the database without requiring a specific command froma user. In an embodiment, the system ingests batches of data and tracksthe process during data pulling and data commitment such that the systemmay continue data ingestion at the same place if a failure occurs duringdata ingestion.

An embodiment of the present disclosure provides a system for dataingestion having increased elasticity over existing systems. In anembodiment, the system includes a plurality of computing resources andvirtual warehouses, and data is autonomously ingested incrementallyusing available resources. Computing capacity is dynamically adapted byaltering the use of computing resources and varying the workload on thesystem. In an embodiment, a pool of common resources is provided for aplurality of client accounts and the use of computing cores iscompletely dynamic and flexible across all client accounts.

An embodiment of the present disclosure provides a system for dataingestion having increased granularity over existing systems. In anembodiment, the system inputs and commits data incrementally andprotects data ingestion against potential network failure. In anembodiment, one user file or a fraction of a user file is ingested atone time. In an embodiment, once a threshold number of user files hasbeen received, the user files will automatically be committed to adatabase table. The user files may be committed to the database table inthe form of immutable micro-partitions that cannot be altered in-place.In an embodiment, the status of database data, such as the contents of adatabase table, is stored in metadata such that the system may recoverprecisely what user file has been ingested and at which position.

In the following description of the disclosure, reference is made to theaccompanying drawings, which form a part hereof, and in which is shownby way of illustration specific implementations in which the disclosuremay be practices. It is understood that other implementation may beutilized, and structural changes may be made without departing from thescope of the disclosure.

In describing and claiming the disclosure, the following terminologywill be used in accordance with the definitions set out below.

It must be noted that, as used in this specification and the appendedclaims, the singular forms “a,” “an,” and “the” include plural referentsunless the context clearly dictates otherwise.

Reference throughout this specification to “one embodiment,” “anembodiment,” “one implementation,” “an implementation,” “one example,”or “an example” means that a particular feature, structure, orcharacteristic described in connection with the embodiment,implementation, or example is included in at least one embodiment of thepresent disclosure. Thus, appearances of the above-identified phrases invarious places throughout this specification are not necessarily allreferring to the same embodiment, implementation, or example. Inaddition, it should be appreciated that the figures provided herewithare for explanation purposes to persons ordinarily skilled in the art.

As used herein, the terms “comprising,” “including,” “containing,” andgrammatical equivalents thereof are inclusive or open-ended terms thatdo not exclude additional, unrecited elements or method steps.

As used herein, “table” is defined as a collection of records (rows).Each record contains a collection of values of table attributes(columns). Tables are typically physically stored in multiple smaller(varying size or fixed size) storage units, e.g. files or blocks.

Embodiments in accordance with the present disclosure may be embodied asan apparatus, method or computer program product. Accordingly, thepresent disclosure may take the form of an entirely hardware-comprisedembodiment, an entirely software-comprised embodiment (includingfirmware, resident software, micro-code, etc.) or an embodimentcombining software and hardware aspects that may all generally bereferred to herein as a “circuit,” “module” or “system.” Furthermore,embodiments of the present disclosure may take the form of a computerprogram product embodied in any tangible medium of expression havingcomputer-usable program code embodied in the medium.

Any combination of one or more computer-usable or computer-readablemedia may be utilized. For example, a computer-readable medium mayinclude one or more of a portable computer diskette, a hard disk, arandom-access memory (RAM) device, a read-only memory (ROM) device, anerasable programmable read-only memory (EPROM or Flash memory) device, aportable compact disc read-only memory (CDROM), an optical storagedevice, and a magnetic storage device. Computer program code forcarrying out operations of the present disclosure may be written in anycombination of one or more programming languages. Such code may becompiled from source code to computer-readable assembly language ormachine code suitable for the device or computer on which the code willbe executed.

Embodiments may also be implemented in cloud computing environments. Inthis description and the following claims, “cloud computing” may bedefined as a model for enabling ubiquitous, convenient, on-demandnetwork access to a shared pool of configurable computing resources(e.g., networks, servers, storage, applications, and services) that canbe rapidly provisioned via virtualization and released with minimalmanagement effort or service provider interaction and then scaledaccordingly. A cloud model can be composed of various characteristics(e.g., on-demand self-service, broad network access, resource pooling,rapid elasticity, and measured service), service models (e.g., Softwareas a Service (“SaaS”), Platform as a Service (“PaaS”), andInfrastructure as a Service (“IaaS”)), and deployment models (e.g.,private cloud, community cloud, public cloud, and hybrid cloud).

The flow diagrams and block diagrams in the attached figures illustratethe architecture, functionality, and operation of possibleimplementations of systems, methods, and computer program productsaccording to various embodiments of the present disclosure. In thisregard, each block in the flow diagrams or block diagrams may representa module, segment, or portion of code which comprises one or moreexecutable instructions for implementing the specified logicalfunction(s). It will also be noted that each block of the block diagramsand/or flow diagrams, and combinations of blocks in the block diagramsand/or flow diagrams, may be implemented by special purposehardware-based systems that perform the specified functions or acts, orcombinations of special purpose hardware and computer instructions.These computer program instructions may also be stored in acomputer-readable medium that can direct a computer or otherprogrammable data processing apparatus to function in a particularmanner, such that the instructions stored in the computer-readablemedium produce an article of manufacture including instruction meanswhich implement the function/act specified in the flow diagram and/orblock diagram block or blocks.

The systems and methods described herein provide a flexible and scalabledata warehouse using a new data processing platform. In someembodiments, the described systems and methods leverage a cloudinfrastructure that supports cloud-based storage resources, computingresources, and the like. Example cloud-based storage resources offersignificant storage capacity available on-demand at a low cost. Further,these cloud-based storage resources may be fault-tolerant and highlyscalable, which can be costly to achieve in private data storagesystems. Example cloud-based computing resources are available on-demandand may be priced based on actual usage levels of the resources.Typically, the cloud infrastructure is dynamically deployed,reconfigured, and decommissioned in a rapid manner.

In the described systems and methods, a data storage system utilizes anSQL (Structured Query Language)-based relational database. However,these systems and methods are applicable to any type of database, andany type of data storage and retrieval platform, using any data storagearchitecture and using any language to store and retrieve data withinthe data storage and retrieval platform. The systems and methodsdescribed herein further provide a multi-tenant system that supportsisolation of computing resources and data between differentcustomers/clients and between different users within the samecustomer/client.

In an embodiment of the disclosure, systems, methods, and devices for abatch data ingestion service are described. The batch data ingestionservice may reduce the burden on a data storage vendor caused byfrequent data loading. The service may further make it more convenientfor a data storage client to load data with the data storage vendor.

In an embodiment of the disclosure, a batch data ingestion service is aRepresentational State Transfer (REST) service with language-specificwrapping Application Program Interfaces (APIs). An embodiment of theservice is asynchronous such that the loading of data into files occursat a later time after files are submitted for loading. An embodiment ofthe service is durable such that file names are committed to persistentstorage before the REST call returns. An embodiment of the serviceprovides clients with the ability to insert data without writing a SQLcommand and avoids a multi-step process of posting and copying data intothe database.

Referring now to the figures, FIG. 1 is a schematic block diagram of asystem 100 for batch data ingestion and for storing database data in oneor more tables by way of a data pipeline system. FIG. 1 is not arepresentation of the flow of data or control. The system 100 includes aclient account 102 that may be in communication with a database system.Such client account 102 may provide new data or update data to becommitted to a database. The system 100 includes REST (RepresentationalState Transfer) layer 104 that includes object resolution 106 andrequest routing 108 systems. The system 100 includes an API (ApplicationProgram Interface) gateway 110 that includes rate limiting 112 andauthentication 114 systems. The system 100 includes token management 116protocol. The system includes a core engine 120 in communication withthe REST layer 104. The core engine 120 includes systems or protocolsresponsible for queue management 122, task execution 124, warehousemanagement 126, file management 128, and load history 130. The coreengine 120 is in communication with an execution platform 132 that isconfigured to execute one or more tasks, such as data ingestion tasks.

The client account 102 is in communication, either directly orindirectly, with a resource manager (see e.g. 204 302) of a databasesystem. The REST layer 104 may be a component of the resource manager302. The client account 102 provides user files to be ingested into adatabase. The user files may be uploaded to a vendor service, such asAmazon Web Services™ or other suitable cloud computing service. Theresource manager 302 may receive a notification that a user file hasbeen added to the client account that should be ingested into thedatabase, or that some data within the database should be updated. Invarious implementations, the resource manager 302 may receive suchnotification automatically or it may periodically poll a data bucketassociated with the client account 102 to determine whether any userfiles have been added.

The REST layer 104 includes a thin outer layer capable of handlingpayload translation into internal format and is further capable ofhandling simple validation. In an embodiment, the REST layer 104 existsinside a resource manager (see e.g. 204, 302). The REST layer 104includes object resolution 106 responsible for transitioning from ascoped table name to a table identification (may be referred to hereinas TableID). The REST layer 104 further includes request routing 108responsible for routing a request to the proper instance of a resourcemanager 302 for a destination table of a user file received from theclient account 102. In an embodiment, request routing 108 occurs afterobject resolution 106. Request routing 108 may use consistent hashingwith virtual nodes to manage which GS instance owns which table.

In an embodiment, when a vendor account (such as a third-party accountresponsible for receiving user files) receives one or more names of userfiles, the object resolution 106 protocol resolves those names of theuser files to internal names. The internal names for the user files arecached.

In an embodiment, the request routing 108 protocol of the REST layer 104of the resource manager 302 is configured to receive user files from theclient account 102 and route those user files to one or more executionnodes of an execution platform for ingesting and processing. In anembodiment, the vendor account (that is, a third-party accountresponsible for receiving user files directly or indirectly from aclient account 102 and providing those user files to, for example, theresource manager 302) may use consistent hashing with virtual nodes tomanage which resource manager 302 owns a particular database table. Thevendor account may hash on a table identification and an identificationfor a particular resource manager 302 to find a match between a userfile and a resource manager 302. The hash space is divided into equallysized partitions. Given a number of resource manager 302 instances, eachresource manager 302 takes a number of partitions. When the resourcemanager 302 adds an execution node to an execution platform (such as thecore engine 120), the resource manager 302 will pull random partitionsfrom each execution node to preserve the ratio of partition rations.Similarly, when an execution node fails, the ration of partitions arespread out among remaining execution nodes. This mapping may bemaintained by a vendor account.

In an embodiment, a database record including all virtual node mappingsis transactionally modified every time a virtual node assignment ischanged. A value associated with the virtual node will be stored inmemory with an object that is processing requests for a given table ofthe database. The value may be passed back and forth with everyinteraction between the resource manager 302 and an execution platform132. The value may be used to detect stale state or requests which maybe discarded.

In an embodiment, a tableList slice is used during recovery situationsto communicate with the vendor account. The tableList slice may indicatewhat database tables are managed by a given virtual node. The tableListslice may be added to or amended as needed and may be cleaned up on abest effort basis when the vendor account notice for a table has beendeleted or is no longer active.

In an embodiment, the entire virtual node table may be cached in memoryon each resource manager 302. Each resource manager 302 may watch forchanges to a database table and poll the database table periodically asa backup measure. In an embodiment, when a request to ingest new userfiles must be routed by the request routing 108 protocol, the vendoraccount may hash the tableId and determine the virtual node containingthe hash, and then the vendor account may lookup the virtual node in thetable and route to a particular resource manager 302.

The API gateway 110 includes a thin layer to guard access to the coreengine 120. The API gateway 110 includes rate limiting 112 responsiblefor basic limits to prevent a large influx of data ingestion requests.The API gateway 110 includes authentication 114 responsible forvalidating the API token passed in a REST request.

In an embodiment, the authentication 114 protocol comprises a set ofdown-scoped credentials. The down-scoped credentials may be used tocreate an API token scoped to a particular table. The token may have theTableID baked into it and may be created programmatically. The token mayhave a short lifetime (in an embodiment the token may expire in 30minutes, one hour, two hours, three hours, and so forth). In anembodiment a client account 102. may dictate the expiration of the tokenand/or receive a new token programmatically. in an embodiment, thesystem 100 receives the token, validates the token, and validateswhether the TableID specified in the token matches the name of the tablespecified in the REST request. In an implementation where the TableIDand the table specified in the REST request do not match, the callerwill receive a particular error response that will request a new token.In an embodiment, the system 100 requires a new token to every time atable is modified.

Token management 116 is responsible for generating new tokens andrevoking prior tokens on demand. The core engine 120 is a core logicthat manages the processing of incoming data. The core engine 120includes queue management 122 responsible for managing queues ofincoming files, including adding or removing files from the queue. Thetask executor 124 begins and manages the execution platform jobs forloading files, including interactions with a compiler. The warehousemanagement 126 manages a loading warehouse, including scaling up anddown on demand. The file management 128 is responsible for handling theingest version of registering native binary files and capturing errors.The load history 130 tracks the history of the loads and errors for agiven table. The load history 130 may further purge load history after aperiod or after a maximum number of entries has been reached.

In an embodiment, the task executor 124 knows the current total numberof active tasks and the desired number of active tasks. The taskexecutor 124 communicates the desired number of active tasks to aresource manager 302 that will strive to keep the size of the warehouseat the desired number of active tasks. The resource manager 302 mayaccomplish that by smoothing the demand over time by way of a movingaverage over some time period that is a fraction of the desired latency.The resource manager 302 may further accomplish that by keeping the sizeof the warehouse slightly larger than the actual need to accommodatetemporary spikes. The resource manager 302 may further accomplish thatby carefully releasing execution nodes and/or assigning work to one ormore execution nodes in such a way as to compact the usage to permitreasonable freeing of execution nodes when needed.

In an embodiment, the task executor 124 generates the execution plan ofthe ingest task. The execution plan may be similar to the plan of copycommand. The task executor 124 may create a code change in copy optionincluding an internal Boolean option “ingest_mode” to current copycommand. The execution plan may compile from the SQL text “copy into Tingest_mode=true” to disable certain functions. The task executor 124may further include a code change in scansset, including a Booleanproperty “dynamic_scanset” that may be true if the copy is in ingestmode.

In an embodiment, warehouse management 126 manages the warehouse fordata ingestion. The warehouse management 126 may control scaling up anddown based on demand, assign work to execution nodes, track states oftasks on the warehouse to allow correct assignments, and track failedservers and respond accordingly. In an embodiment, the warehousemanagement 126 is incorporated in a resource manager 302. It should benoted that because the ingest task is single threaded, there will beassigned one task per core on one warehouse node. For each warehousenode, the number of running tasks is tracked. The task executor 124 mayschedule a new task, ask the warehouse management 126 for a server touse, and the warehouse management 126 will choose already busy serversto make it easier to free execution nodes when the load decreases. Thetask executor 124 must inform warehouse management 128 about taskcompletion.

In an embodiment, load history 130 monitors the loading result and keepstrack of whether files or data have successfully been ingested into thedatabase. The ingest history may further be stored in a metadata storewithin the database or separate from the database and accessible by aresource manager 302. The ingest history includes, for example, the filename, TableID, file size, row count, status, and first error. In anembodiment, the error management of the data loading will be a separatedproject.

FIG. 2 is a schematic block diagram of a process 200 of ingesting datainto a database. The process 200 begins and a client account 102 sendsan ingest request at 202. The client account 102 may directly orindirectly communicate with the database system to send in the ingestrequest. In an embodiment, the ingest request is a notification providedby a third-party vendor storage account, or the ingest request may arisefrom a resource manager 302 polling a data lake associated with theclient account 102 to determine whether any user files have been addedto the client account 102 that have not yet been ingested into thedatabase. The notification includes a list of user files to insert intoa table of the database. The user files are persisted in a queuespecific to the receiving table of the database.

The ingest request is received by a resource manager 204 (see also 302).The resource manager 204 identifies at 206 a user file to ingest,assigns at 208 the user file to one or more execution nodes, andregisters at 210 micro-partition metadata associated with a databasetable after the user file is ingested into a micro-partition of thedatabase table. The resource manager 204 provisions one or moreexecution nodes 214, 218 of an execution platform 212 to perform one ormore tasks associated with ingesting the user file. Such ingest tasks216 a, 216 b, 220 a, 220 b include, for example, cutting a user fileinto one or more partitions, generating a new micro-partition based onthe user file, and/or inserting the new micro-partition in a table ofthe database.

The system 200 begins an IngestTask that will run on a warehouse. TheIngestTask will pull user files from the queue for a database tableuntil it is told to stop doing so. The IngestTask will periodically cuta new user file and add it to the database table. In one embodiment, theingest process is “serverless” in that it is an integrated serviceprovided by the database or resource manager 204. That is, a userassociated with the client account 102 need not provision its ownwarehouse or a third-party warehouse in order to perform the ingestionprocess. For example, the database or database provided (e.g., viainstances of the resource manager 204) may maintain the ingest warehousethat then services one or more or all accounts/customers of the databaseprovider.

It should be appreciated that there may be more than one IngestTaskpulling from a queue for a given table, and this might be necessary tokeep up with the rate of incoming data. In an embodiment, the IngestTaskmay decide the time to cut a new file to increase the chances of gettingan ideal sized file and avoid “odd sized” files that would result if thefile size was line up with one or more user files. This may come at thecost of added complexity as the track line number of the files consumedmust be tracked.

In an embodiment, all requests for a particular table will be routed toa single instance of the resource manager 204. Each instance of theresource manager 204 may be responsible for a set of database tables. Inan embodiment, this is accomplished by using consistent hashing withvirtual nodes that permits a node to be treated as a write-through cachefor the queue, eliminating the need to read the items in the queue fromthe metadata store.

Referring now to FIG. 3, a data processing platform 300 is illustratedfor running the methods disclosed herein. As shown in FIG. 3, resourcemanager 302 may be coupled to multiple client accounts 314 a, 314 b, and314 n. In particular implementations, resource manager 302 can supportany number of client accounts desiring access to the execution platform304 and/or or shared database storage 308. Client accounts 314 a, 314 b,and 314 n may include, for example, end users providing user files to beingested into the database, data storage and retrieval requests, systemadministrators managing the systems and methods described herein, andother components/devices that interact with resource manager 302.

Resource manager 302 provides various services and functions thatsupport the operation of all systems and components within dataprocessing platform 300. Resource manager 302 may be coupled to sharedmetadata 312, which is associated with the entirety of data storedthroughout data processing platform 300. In some embodiments, sharedmetadata 312 may include a summary of data stored in remote data storagesystems as well as data available from a local cache. Additionally,shared metadata 312 may include information regarding how data isorganized in the remote data storage systems and the local caches.Shared metadata 312 may allow systems and services to determine whethera piece of data needs to be processed without loading or accessing theactual data from a storage device.

Resource manager 302 may be further coupled to the execution platform304, which provides multiple computing resources that execute variousdata storage and data retrieval tasks, as discussed in greater detailbelow. The execution platform 304 includes a plurality of executionnodes 306 a, 306 b, 306 c, and 306 n configured to process various tasksassociated with the database, including ingesting new user files andgenerating one or more micro-partitions for a table of a database basedon the new user files. Execution platform 304 may be coupled to shareddatabase storage 308 including multiple data storage devices 310 a, 310b, 310 c, and 310 n. In some embodiments, the shared database storage308 includes cloud-based storage devices located in one or moregeographic locations. For example, the shared database storage 308 maybe part of a public cloud infrastructure or a private cloudinfrastructure. The shared database storage 308 may include hard diskdrives (HDDs), solid state drives (SSDs), storage clusters or any otherdata storage technology. Additionally, shared database storage 308 mayinclude distributed file systems (such as Hadoop Distributed FileSystems (HDFS)), object storage systems, and the like. It should beappreciated that the shared database storage 308 may be accessible byone or more instances of the resource manager 302 but may not beaccessible by all client accounts 314 a-314 n. In an embodiment, asingle instance of the resource manager 302 is shared by a plurality ofclient accounts 314 a-314 n. In an embodiment, each client account 314a-314 n has its own resource manager and/or its own shared databasestorage 308 that is shared amongst a plurality of execution nodes 306a-306 n of the execution platform 304. In an embodiment, the resourcemanager 302 is responsible for providing a particular client account 314a-314 n access to particular data within the shared database storage308.

In particular embodiments, the communication links between resourcemanager 302 and client accounts 314 a-314 n, shared metadata 312, andexecution platform 304 are implemented via one or more datacommunication networks. Similarly, the communication links betweenexecution platform 304 and shared database storage 308 are implementedvia one or more data communication networks. These data communicationnetworks may utilize any communication protocol and any type ofcommunication medium. In some embodiments, the data communicationnetworks are a combination of two or more data communication networks(or sub-networks) coupled to one another. In alternate embodiments,these communication links are implemented using any type ofcommunication medium and any communication protocol.

As shown in FIG. 3, data storage devices 310 a-310 n are decoupled fromthe computing resources associated with execution platform 304. Thisarchitecture supports dynamic changes to data processing platform 300based on the changing data storage/retrieval needs as well as thechanging needs of the users and systems accessing data processingplatform 300. The support of dynamic changes allows data processingplatform 300 to scale quickly in response to changing demands on thesystems and components within data processing platform 300. Thedecoupling of the computing resources from the data storage devicessupports the storage of large amounts of data without requiring acorresponding large amount of computing resources. Similarly, thisdecoupling of resources supports a significant increase in the computingresources utilized at a particular time without requiring acorresponding increase in the available data storage resources.

Resource manager 302, shared metadata 312, execution platform 304, andshared database storage 308 are shown in FIG. 3 as individualcomponents. However, each of resource manager 302, shared metadata 312,execution platform 304, and shared database storage 308 may beimplemented as a distributed system (e.g., distributed across multiplesystems/platforms at multiple geographic locations). Additionally, eachof resource manager 302, shared metadata 312, execution platform 304,and shared database storage 308 can be scaled up or down (independentlyof one another) depending on changes to the requests received fromclient accounts 314 a-314 n and the changing needs of data processingplatform 300. Thus, data processing platform 300 is dynamic and supportsregular changes to meet the current data processing needs.

FIG. 4 is a block diagram depicting an embodiment of resource manager302. As shown in FIG. 4, resource manager 302 includes an access manager402 and a key manager 404 coupled to a data storage device 406. Accessmanager 402 may handle authentication and authorization tasks for thesystems described herein. Key manager 404 may manage storage andauthentication of keys used during authentication and authorizationtasks. A request processing service 408 manages received data storagerequests and data retrieval requests. A management console service 410supports access to various systems and processes by administrators andother system managers.

Resource manager 302 may also include a job compiler 412, a joboptimizer 414 and a job executor 416. Job compiler 412 parses tasks,such as ingest tasks, and generates the execution code for the ingestionof user files. Job optimizer 414 determines the best method to executeingest tasks based on the data that needs to be processed and/oringested. Job executor 416 executes code for ingest tasks received byresource manager 302. A job scheduler and coordinator 418 may sendreceived user files to the appropriate services or systems forcompilation, optimization, and dispatch to the execution platform 304. Avirtual warehouse manager 420 manages the operation of multiple virtualwarehouses implemented in an execution platform.

Additionally, resource manager 302 includes a configuration and metadatamanager 422, which manages the information related to the data stored inthe remote data storage devices and in the local caches. A monitor andworkload analyzer 424 oversees the processes performed by resourcemanager 302 and manages the distribution of tasks (e.g., workload)across the virtual warehouses and execution nodes in the executionplatform. Configuration and metadata manager 422 and monitor andworkload analyzer 424 are coupled to a data storage device 426.

FIG. 5 is a block diagram depicting an embodiment of an executionplatform 304. As shown in FIG. 5, execution platform 304 includesmultiple virtual warehouses, including virtual warehouse 1, virtualwarehouse 2, and virtual warehouse n. Each virtual warehouse includesmultiple execution nodes that each include a data cache and a processor.The virtual warehouses can execute multiple tasks in parallel by usingthe multiple execution nodes. As discussed herein, execution platform304 can add new virtual warehouses and drop existing virtual warehousesin real-time based on the current processing needs of the systems andusers. This flexibility allows the execution platform 304 to quicklydeploy large amounts of computing resources when needed without beingforced to continue paying for those computing resources when they are nolonger needed. All virtual warehouses can access data from any datastorage device (e.g., any storage device in shared database storage308). Although each virtual warehouse shown in FIG. 5 includes threeexecution nodes, a particular virtual warehouse may include any numberof execution nodes. Further, the number of execution nodes in a virtualwarehouse is dynamic, such that new execution nodes are created whenadditional demand is present, and existing execution nodes are deletedwhen they are no longer necessary.

Each virtual warehouse is capable of accessing any of the data storagedevices 310 a-310 n shown in FIG. 3. Thus, the virtual warehouses arenot necessarily assigned to a specific data storage device and, instead,can access data from any of the data storage devices 310 a-310 n withinthe shared database storage 308. Similarly, each of the execution nodesshown in FIG. 5 can access data from any of the data storage devices 310a-310 n, In some embodiments, a particular virtual warehouse or aparticular execution node may be temporarily assigned to a specific datastorage device, but the virtual warehouse or execution node may lateraccess data from any other data storage device.

In the example of FIG. 5, virtual warehouse 1 includes three executionnodes 502 a, 502 b, and 502 n. Execution node 502 a includes a cache 504b and a processor 506 a. Execution node 502 b includes a cache 504 b anda processor 506 b. Execution node 502 n includes a cache 504 n and aprocessor 506 n. Each execution node 502 a, 502 b, and 502 n isassociated with processing one or more data storage and/or dataretrieval tasks. For example, a virtual warehouse may handle datastorage and data retrieval tasks associated with an internal service,such as a clustering service, a materialized view refresh service, afile compaction service, a storage procedure service, or a file upgradeservice. In other implementations, a particular virtual warehouse mayhandle data storage and data retrieval tasks associated with aparticular data storage system or a particular category of data.

Similar to virtual warehouse 1 discussed above, virtual warehouse 2includes three execution nodes 512 a, 512 b, and 512 n. Execution node512 a includes a cache 514 a and a processor 516 a. Execution node 512 bincludes a cache 514 b and a processor 516 b. Execution node 512 nincludes a cache 514 n and a processor 516 n. Additionally, virtualwarehouse 3 includes three execution nodes 522 a, 522 b, and 522 n.Execution node 522 a includes a cache 524 a and a processor 526 a.Execution node 522 b includes a cache 524 b and a processor 526 b.Execution node 522 n includes a cache 524 n and a processor 526 n.

In some embodiments, the execution nodes shown in FIG. 5 are statelesswith respect to the data the execution nodes are caching. For example,these execution nodes do not store or otherwise maintain stateinformation about the execution node or the data being cached by aparticular execution node. Thus, in the event of an execution nodefailure, the failed node can be transparently replaced by another node.Since there is no state information associated with the failed executionnode, the new (replacement) execution node can easily replace the failednode without concern for recreating a particular state.

Although the execution nodes shown in FIG. 5 each include one data cacheand one processor, alternate embodiments may include execution nodescontaining any number of processors and any number of caches.Additionally, the caches may vary in size among the different executionnodes. The caches shown in FIG. 5 store, in the local execution node,data that was retrieved from one or more data storage devices in theshared database storage 308. Thus, the caches reduce or eliminate thebottleneck problems occurring in platforms that consistently retrievedata from remote storage systems. Instead of repeatedly accessing datafrom the remote storage devices, the systems and methods describedherein access data from the caches in the execution nodes which issignificantly faster and avoids the bottleneck problem discussed above.In some embodiments, the caches are implemented using high-speed memorydevices that provide fast access to the cached data. Each cache canstore data from any of the storage devices in the shared databasestorage 308.

Further, the cache resources and computing resources may vary betweendifferent execution nodes. For example, one execution node may containsignificant computing resources and minimal cache resources, making theexecution node useful for tasks that require significant computingresources. Another execution node may contain significant cacheresources and minimal computing resources, making this execution nodeuseful for tasks that require caching of large amounts of data. Yetanother execution node may contain cache resources providing fasterinput-output operations, useful for tasks that require fast scanning oflarge amounts of data. In some embodiments, the cache resources andcomputing resources associated with a particular execution node aredetermined when the execution node is created, based on the expectedtasks to be performed by the execution node.

Additionally, the cache resources and computing resources associatedwith a particular execution node may change over time based on changingtasks performed by the execution node. For example, an execution nodemay be assigned more processing resources if the tasks performed by theexecution node become more processor-intensive. Similarly, an executionnode may be assigned more cache resources if the tasks performed by theexecution node require a larger cache capacity.

Although virtual warehouses 1, 2, and n are associated with the sameexecution platform 304, the virtual warehouses may be implemented usingmultiple computing systems at multiple geographic locations. Forexample, virtual warehouse 1 can be implemented by a computing system ata first geographic location, while virtual warehouses 2 and n areimplemented by another computing system at a second geographic location.In some embodiments, these different computing systems are cloud-basedcomputing systems maintained by one or more different entities.

Additionally, each virtual warehouse is shown in FIG. 5 as havingmultiple execution nodes. The multiple execution nodes associated witheach virtual warehouse may be implemented using multiple computingsystems at multiple geographic locations. For example, an instance ofvirtual warehouse 1 implements execution nodes 502 a and 502 b on onecomputing platform at a geographic location and implements executionnode 502 n at a different computing platform at another geographiclocation. Selecting particular computing systems to implement anexecution node may depend on various factors, such as the level ofresources needed for a particular execution node (e.g., processingresource requirements and cache requirements), the resources availableat particular computing systems, communication capabilities of networkswithin a geographic location or between geographic locations, and whichcomputing systems are already implementing other execution nodes in thevirtual warehouse.

Execution platform 304 is also fault tolerant. For example, if onevirtual warehouse fails, that virtual warehouse is quickly replaced witha different virtual warehouse at a different geographic location.

A particular execution platform 304 may include any number of virtualwarehouses. Additionally, the number of virtual warehouses in aparticular execution platform is dynamic, such that new virtualwarehouses are created when additional processing and/or cachingresources are needed. Similarly, existing virtual warehouses may bedeleted when the resources associated with the virtual warehouse are nolonger necessary.

In some embodiments, the virtual warehouses may operate on the same datain the shared database storage 308 but each virtual warehouse has itsown execution nodes with independent processing and caching resources.This configuration allows requests on different virtual warehouses to beprocessed independently and with no interference between the requests.This independent processing, combined with the ability to dynamicallyadd and remove virtual warehouses, supports the addition of newprocessing capacity for new users without impacting the performanceobserved by the existing users.

FIG. 6 is a block diagram depicting an example operating environment 600with the queue 602 in communication with multiple virtual warehousesunder a virtual warehouse manager 502. In environment 600, the queue 602has access to multiple database shared storage devices 608 a, 608 b, 608c, 608 d, 608 e, and 608 n through multiple virtual warehouses 606 a,606 b, and 606 n. Although not shown in FIG. 6, the queue 602 may accessvirtual warehouses through the resource manager 302. In particularembodiments, databases 608 a-608 n are contained in the shared databasestorage 308 and are accessible by any virtual warehouse implemented inthe execution platform 212. in some embodiments, the queue 602 mayaccess one of the virtual warehouses 606 a-606 n using a datacommunication network such as the Internet. In some implementations, aclient account may specify that the queue 602 (configured for storinginternal jobs to be completed) should interact with a particular virtualwarehouse 606 a-606 n at a particular time.

In an embodiment (as illustrated), each virtual warehouse 606 a-606 ncan communicate with all databases 608 a-608 n. In some embodiments,each virtual warehouse 606 a-606 n is configured to communicate with asubset of all databases 608 a-608 n, In such an arrangement, anindividual client account associated with a set of data may send alldata retrieval and data storage requests through a single virtualwarehouse and/or to a certain subset of the databases 608 a-608 n.Further, where a certain virtual warehouse 606 a-606 n is configured tocommunicate with a specific subset of databases 608 a-608 n, theconfiguration is dynamic. For example, virtual warehouse 606 a may beconfigured to communicate with a first subset of databases 608 a-608 nand may later be reconfigured to communicate with a second subset ofdatabases 608 a-608 n.

In an embodiment, the queue 602 sends data retrieval, data storage, anddata processing requests to the virtual warehouse manager 604, whichroutes the requests to an appropriate virtual warehouse 606 a-606 n. Insome implementations, the virtual warehouse manager 604 provides adynamic assignment of jobs to the virtual warehouses 606 a-606 n.

In some embodiments, fault tolerance systems create a new virtualwarehouse in response to a failure of a virtual warehouse. The newvirtual warehouse may be in the same virtual warehouse group or may becreated in a different virtual warehouse group at a different geographiclocation.

The systems and methods described herein allow data to be stored andaccessed as a service that is separate from computing (or processing)resources. Even if no computing resources have been allocated from theexecution platform 212, data is available to a virtual warehouse withoutrequiring reloading of the data from a remote data source. Thus, data isavailable independently of the allocation of computing resourcesassociated with the data. The described systems and methods are usefulwith any type of data. In particular embodiments, data is stored in astructured, optimized format. The decoupling of the data storage/accessservice from the computing services also simplifies the sharing of dataamong different users and groups. As discussed herein, each virtualwarehouse can access any data to which it has access permissions, evenat the same time as other virtual warehouses are accessing the samedata. This architecture supports running queries without any actual datastored in the local cache. The systems and methods described herein arecapable of transparent dynamic data movement, which moves data from aremote storage device to a local cache, as needed, in a manner that istransparent to the user of the system. Further, this architecturesupports data sharing without prior data movement since any virtualwarehouse can access any data due to the decoupling of the data storageservice from the computing service.

FIG. 7 is a block diagram architecture model of a system for automateddata ingestion 700. The system 700 includes a plurality of clientaccounts, including for example client account A and client account B.The client accounts may include one or more data buckets or data lakescomprising user files. Each of the client accounts is coupled to aclient account queue comprising a listing of all user files to beingested into a database. As illustrated in FIG. 7, client account A iscoupled to account A queue 704 and client account B is coupled toaccount B queue 708. In an alternative embodiment, a plurality of clientaccounts may feed into one or more client account queues. An ingestpoller 706, 710 is associated with each of the client accounts. In anembodiment, an ingest poller 706, 710 may poll a queue for one or moreclient accounts. As illustrated in FIG. 7, ingest pollen 706 isresponsible for polling account A queue 704 and ingest poller 710 isresponsible for polling account B queue 708. Each ingest poller may pollacross a number of client account queues. The ingest poller 706, 710 mayinspect a notification received from a client account queue and matchthe notification against all available pipes 712, 714, 716, 718, 720,722, 724, and 726. The ingest poller 706, 710 is responsible fordelivering the notification to each of the matching pipes 712-726 suchthat the associated user file may be retrieved from the client accountand delivered to the appropriate pipe. The client account queues and theassociated ingest pollers are embodied within a notification channel702.

In an embodiment the ingest poller 706, 710 conducts a polling or polledoperation. In an embodiment, the ingest poller 706, 710 is a piece offunctionality existing within a resource manager 302. The ingest poller706, 710 may inspect each notification from a client account queue 704,708, and for each message the ingest poller 706, 710 will match thenotification against each pipe 712-726. The ingest poller 706, 710 willdeliver the notification to each of the matching pipes 712-726.

In an embodiment, the system 700 includes a plurality of client accountqueues comprising a pool of Simple Queue Service™ (SQS) queues as partof an Amazon Web Services™ S3 bucket. The pool of SQS queues may beprovided to client accounts to add user files to a bucket. Anotification may be automatically generated when one or more user filesare added to a client account data bucket. A plurality of customer databuckets may be provided to each client account. The client accountqueues 704, 708 may handle data events (i.e. the receipt of one or moreuser files) from a number of data buckets for a client account. A clientaccount may include a plurality of data buckets that will have one ormore dedicated client account queues 704, 708 for that client account.In an embodiment, each client account queue 704, 708 handles events froma plurality of data buckets for a single client account that willreceive user files for a plurality of pipes 712-726. In an embodiment,each ingest poller 706. 710 polls across a number of client accountqueues 704, 708 and is not dedicated to a single client account queue704, 708 as illustrated in FIG. 7.

In an embodiment, the creation of a pipe 712-726 occurs at either of anexternal stage or an internal stage. If two pipes are created with thesame matching conditions, an applicable user file will be loaded intoboth pipes. In an embodiment, when a client drops a pipe 712-726, ifthere are other pipes that are being auto-ingested from the same clientdata bucket, there will be no output. If the pipe 712-726 being droppedis the last pipe that is being auto-ingested for the client data bucket,then the queue configuration will be removed from the bucketnotification configuration.

In an embodiment, there exist policy limitations on the client accountqueue such that the client account queue will need to be configured witha policy to accept messages from a client data bucket. In an embodiment,for a client data bucket to be able to send a creation event to theclient account queue one of the following must be true: the client databucket should be allowed from the principal, or the client data bucketsource must be allowed in the condition. If the client data bucket isallowed from the principal, then all entities from that client accountwill be able to do a send message on the client account queue. Thus, torestrict only the client data bucket to send notifications, thecondition may be set to point to the client data bucket name.

In an embodiment, there are multiple client account queues for a singleclient account. This may be beneficial in an embodiment where having asingle client account queue for all possible client accounts wouldrequire the single client account queue to be shared across many clientdata buckets and the single client account queue may not be able tohandle a great plurality of client data buckets.

In an embodiment, the system 700 maintains a pool of client accountqueues for each client account. Each client account queue may service anumber of stages and pipes 712-726. Each instance of the resourcemanager 302 will build a token ring for one or more client accountqueues and will watch that range of tokens that are assigned to theapplicable client account queues, and will further poll those clientaccount queues.

In an embodiment, whenever a pipe 712-726 is configured to automaticallyingest, the ingest request is redirected to the instance of the resourcemanager 302 that is currently handling provisioning of user files. Oncethe correct instance of the resource manager 302 receives the ingestrequest, it may read all client account queues that it has from cache.The instance of the resource manager 302 may further check if one of theclient account queues already has an existing ingest policy for anapplicable client data bucket. If so, it may increment the reference forthat client account queue in metadata store and return that clientaccount queue. The instance of the resource manager 302 may furtherdetermine if no client account queue has an existing policy andimplement a client account queue selection policy to either select anexisting client account queue or create a new client account queue. Thismay include adding a policy to the client account queue to provision anew client account queue for that client account under certaincircumstances. It may further increment the reference for the clientaccount queue in metadata store and return that client account queue.

In an embodiment, the client account queue selection policy includesgrouping the client account queues by client account. In an embodiment,this includes using just one client account queue, but if there aremultiple client account queues for a client account, the client accountqueue selection policy includes selecting one client account with theleast number of client data buckets. The client account queue selectionpolicy may further include selecting client account queues by tokenrange-based grouping. This may include using metrics on a token rangeidentifying which client account queues are seeing a lot of traffic andselect one client account queue that has been seeing the least amount oftraffic. It may further include determining the number of client databuckets that are on different client account queues and selecting oneclient account queue with the least number of client data buckets.

In an embodiment, each objection creation notification message comprisesthe client data bucket name and full object name providing the completepath of an object (i.e. a user file) in a client data bucket. A singleclient account queue may feed into several pipes with each pipe having aset of matching rules.

The client account queues are a message queuing service that decouplesand scales microservices, distributed systems, and serverlessapplications. In an embodiment, the client account queues 704, 708 arean Amazon® Simple Queue Service (SQS) provided by Amazon Web Services®.The SQS enables building applications from individual components thateach perform a discrete function for improving scalability andreliability. SQS can improve the cost-effectiveness of decoupling andcoordinating components of a cloud application. With SQS, a client maysend, store, and receive messages between software components at anyvolume, without losing messages or requiring other services to be alwaysavailable.

In an embodiment, SQS may provide two types of message queues, includinga standard queue and a FIFO queue. The standard queue offers maximumthroughput, best-effort ordering, and at-least-once-delivery of message.FIFO (First In First Out) queues are designed to guarantee that messagesare processed exactly once, in the exact order that they are sent, withlimited throughput.

FIG. 8 is a schematic flow chart diagram of a method 800 for batch dataingestion into a database. The method 800 may be performed by anysuitable computing device such as a resource manager 302 as disclosedherein. The method 800 begins and the resource manager determines at 802a notification indicating a presence of a user file received from aclient account to be ingested into a database. The method 800 continuesand the resource manager identifies at 804 data in the user file andidentifies at 806 a target table of the database to receive the data inthe user file. The method 800 continues and the resource managergenerates at 808 an ingest task indicating the data and the targettable. The method 800 continues and the resource manager assigns at 810the ingest task to an execution node of an execution platform, whereinthe execution platform comprises a plurality of execution nodesoperating independent of a plurality of shared storage devicescollectively storing database data. The method 800 continues and theresource manager register at 812 metadata concerning the target table ina metadata store after the data has been fully committed to the targettable by the execution node.

The method 800 may be executed autonomously without user intervention.The method 800 may include the execution of multiple ingest tasksasynchronously across the execution platform such that the multipleingest tasks are executed substantially in parallel.

FIG. 9 is a block diagram depicting an example computing device 900. Insome embodiments, computing device 900 is used to implement one or moreof the systems and components discussed herein. For example, computingdevice 900 may allow a user or administrator to access the resourcemanager 902. Further, computing device 900 may interact with any of thesystems and components described herein. Accordingly, computing device900 may be used to perform various procedures and tasks, such as thosediscussed herein. Computing device 900 can function as a server, aclient or any other computing entity. Computing device 900 can be any ofa wide variety of computing devices, such as a desktop computer, anotebook computer, a server computer, a handheld computer, a tablet, andthe like.

Computing device 900 includes one or more processor(s) 902, one or morememory devices) 904, one or more interface(s) 906, one or more massstorage device(s) 908, and one or more Input/Output (I/O) device(s) 910,all of which are coupled to a bus 912. Processor(s) 902 include one ormore processors or controllers that execute instructions stored inmemory device(s) 904 and/or mass storage device(s) 908. Processor(s) 902may also include various types of computer-readable media, such as cachememory.

Memory device(s) 904 include various computer-readable media, such asvolatile memory (e.g., random access memory (RAM)) and/or nonvolatilememory (e.g., read-only memory (ROM)). Memory device(s) 904 may alsoinclude rewritable ROM, such as Flash memory.

Mass storage device(s) 908 include various computer readable media, suchas magnetic tapes, magnetic disks, optical disks, solid state memory(e.g., Flash memory), and so forth. Various drives may also be includedin mass storage device(s) 908 to enable reading from and/or writing tothe various computer readable media. Mass storage device(s) 908 includeremovable media and/or non-removable media.

I/O device(s) 910 include various devices that allow data and/or otherinformation to be input to or retrieved from computing device 900,Example I/O device(s) 910 include cursor control devices, keyboards,keypads, microphones, monitors or other display devices, speakers,printers, network interface cards, modems, lenses, CCDs or other imagecapture devices, and the like.

Interface(s) 906 include various interfaces that allow computing device900 to interact with other systems, devices, or computing environments.Example interface(s) 906 include any number of different networkinterfaces, such as interfaces to local area networks (LANs), wide areanetworks (WANs), wireless networks, and the Internet.

Bus 912 allows processor(s) 902, memory device(s) 904, interface(s) 906,mass storage device(s) 908, and I/O device(s) 910 to communicate withone another, as well as other devices or components coupled to bus 912.Bus 912 represents one or more of several types of bus structures, suchas a system bus, PCI bus, IEEE 1394 bus, USB bus, and so forth.

For purposes of illustration, programs and other executable programcomponents are shown herein as discrete blocks, although it isunderstood that such programs and components may reside at various timesin different storage components of computing device 900, and areexecuted by processor(s) 902. Alternatively, the systems and proceduresdescribed herein can be implemented in hardware, or a combination ofhardware, software, and/or firmware. For example, one or moreapplication specific integrated circuits (ASICs) can be programmed tocarry out one or more of the systems and procedures described herein. Asused herein, the term “module” is intended convey the implementationapparatus for accomplishing a process, such as by hardware, or acombination of hardware, software, and/or firmware, for the purposes ofperforming all or parts of query operations.

The systems and methods described herein allow data to be stored andaccessed as a service that is separate from computing (or processing)resources. Even if no computing resources have been allocated from theexecution platform, data is available to a virtual warehouse withoutrequiring reloading of the data from a remote data source. Thus, data isavailable independently of the allocation of computing resourcesassociated with the data. The described systems and methods are usefulwith any type of data. In particular embodiments, data is stored in astructured, optimized format. The decoupling of the data storage/accessservice from the computing services also simplifies the sharing of dataamong different users and groups. As discussed herein, each virtualwarehouse can access any data to which it has access permissions, evenat the same time as other virtual warehouses are accessing the samedata. This architecture supports running queries without any actual datastored in the local cache. The systems and methods described herein arecapable of transparent dynamic data movement, which moves data from aremote storage device to a local cache, as needed, in a manner that istransparent to the user of the system. Further, this architecturesupports data sharing without prior data movement since any virtualwarehouse can access any data due to the decoupling of the data storageservice from the computing service.

Although the present disclosure is described in terms of certainpreferred embodiments, other embodiments will be apparent to those ofordinary skill in the art, given the benefit of this disclosure,including embodiments that do not provide all of the benefits andfeatures set forth herein, which are also within the scope of thisdisclosure. It is to be understood that other embodiments may beutilized, without departing from the scope of the present disclosure.

EXAMPLES

The following Examples pertain to further embodiments:

Example 1 is a system for batch data ingestion into a database, thesystem including means for determining a notification indicating apresence of a user file received from a client account to be ingestedinto a database. The system further includes means for identifying datain the user file and means for identifying a target table of thedatabase to receive the data in the user file. The system includes meansfor generating an ingest task indicating the data and the target table.The system includes means for assigning the ingest task to an executionnode of an execution platform, wherein the execution platform comprisesa plurality of execution nodes operating independent of a plurality ofshared storage devices collectively storing database data. The systemincludes means for registering metadata concerning the target table in ametadata store after the data has been fully committed to the targettable by the execution node.

Example 2 is a system as in Example 1, further comprising means forcommitting the user file to a client account queue, and wherein themeans for determining the notification indicating the presence of theuser file comprises determining by polling the client account queue todetermine whether any new user files have been committed to the clientaccount queue since a last time the client account queue was polled.

Example 3 is a system as in any of Examples 1-2, wherein the means fordetermining the notification indicating the presence of the user file isconfigured to determine by receiving a notification from a data lakeindicating the user file has been added.

Example 4 is a system as in any of Examples 1-3, further comprising:means for identifying a current total number of active ingest tasks anda desired number of active ingest tasks; and means for managing theplurality of execution nodes of the execution platform such that thecurrent total number of active ingest tasks is equal to or approachesthe desired number of active ingest tasks by one or more of: smoothingdemand for the plurality of execution nodes over time by way of a movingaverage; or maintaining an execution platform having more than arequired number of active execution nodes for processing the currenttotal number of active ingest tasks.

Example 5 is a system as in any of Examples 1-4, further comprisingmeans for generating an ingest history comprising an indication ofwhether data from one or more user files is successfully stored in thedatabase, wherein the ingest history is stored in a metadata store, andwherein the ingest history comprises one or more of a file name, a tableidentification, a file size, a row count, or an ingest error code.

Example 6 is a system as in any of Examples 1-5, further comprisingmeans for assigning the user file to an instance of a resource managerbased on consistent hashing, wherein a hash of the consistent hashing isassociated with a table identification of the target table, and whereinthe instance of the resource manager is assigned to manage processes forthe hash associated with the target table.

Example 7 is a system as in any of Examples 1-6, further comprisingmeans for adding a new instance of a resource manager, wherein addingthe new instance of the resource manager comprises dividing a pluralityof hashes of the consistent hashing and assigning each of the pluralityof hashes to a plurality of instances of resource managers such thateach instance of the plurality of instances is assigned an equal ornearly equal number of tables.

Example 8 is a system as in any of Examples 1-7, further comprisingmeans for committing the user file to a client account queue, andwherein the means for generating the ingest task is configured togenerate one or more ingest tasks based on an amount of work in theclient account queue, wherein the amount of work in the client accountqueue is determined. based on one or more of an approximate size of theuser file based on an average size of recently ingested user files fromthe client account; a number of user files in the client account queue;or a size of the user file as indicated by the client account.

Example 9 is a system as in any of Examples 1-8, wherein the data iscommitted to the target table by generating a new micro-partition forthe target table, wherein the new micro-partition is stored in theplurality of shared storage devices only after the data is fully andsuccessfully inserted.

Example 10 is a system as in any of Examples 1-9, wherein the means forassigning the task to the execution node of the execution platform isconfigured to manage a total number of tasks being processed by theexecution platform by on one or more of: delaying assigning the ingesttask to the execution node when a threshold number of tasks are alreadybeing processed by the execution platform; building optimally sizedmicro-partitions by delaying assigning the ingest task to the executionnode until a threshold number of new user files has been committed to aclient account queue; minimizing latency by assigning the ingest task tothe execution node as soon as the user files is committed to the clientaccount queue; or minimizing processing overhead of starting andstopping ingest tasks by delaying assigning the ingest task to theexecution node until a threshold number of new user files has beencommitted to the client account queue.

Example 11 is a system as in any of Examples 1-10, wherein managing thetotal number of tasks being processed by the execution platformcomprises balancing a plurality of latency factors to ensure customerlatency remains below a threshold level while the total number of tasksis minimized.

Example 12 is a method for batch data ingestion into a database. Themethod includes determining a notification indicating a presence of auser file received from a client account to be ingested into a database.The method includes identifying data in the user file and identifying atarget table of the database to receive the data in the user file. Themethod includes generating an ingest task indicating the data and thetarget table. The method includes assigning the ingest task to anexecution node of an execution platform, wherein the execution platformcomprises a plurality of execution nodes operating independent of aplurality of shared storage devices collectively storing database data.The method includes registering metadata concerning the target table ina metadata store after the data has been fully committed to the targettable by the execution node.

Example 13 is a method as in Example 12, further comprising committingthe user file to a client account queue, and wherein determining thenotification indicating the presence of the user file comprisesdetermining by polling the client account queue to determine whether anynew user files have been committed to the client account queue since alast time the client account queue was polled.

Example 14 is a method as in any of Examples 12-13, wherein determiningthe notification indicating the presence of the user file is configuredto determine by receiving a notification from a data lake indicating theuser file has been added.

Example 15 is a method as in any of Examples 12-14, further comprising:identifying a current total number of active ingest tasks and a desirednumber of active ingest tasks; and managing the plurality of executionnodes of the execution platform such that the current total number ofactive ingest tasks is equal to or approaches the desired number ofactive ingest tasks by one or more of: smoothing demand for theplurality of execution nodes over time by way of a moving average; ormaintaining an execution platform having more than a required number ofactive execution nodes for processing the current total number of activeingest tasks.

Example 16 is a method as in any of Examples 1-5, further comprisinggenerating an ingest history comprising an indication of whether datafrom one or more user files is successfully stored in the database,wherein the ingest history is stored in a micro-partition of a table ofthe database, and wherein the ingest history comprises one or more of afile name, a table identification, a file size, a row count, or aningest error code.

Example 17 is a method as in any of Examples 12-16, further comprisingassigning the user file to an instance of a resource manager based onconsistent hashing, wherein a hash of the consistent hashing isassociated with the user file and the target table, and wherein theinstance of the resource manager is assigned to manage processes for thehash associated with the target table.

Example 18 is a method as in any of Examples 12-17, further comprisingadding a new execution node to the execution platform, wherein addingthe new execution node comprises dividing a plurality of hashes of theconsistent hashing and assigning each of the plurality of hashes to theplurality of execution nodes such that each cation node of the pluralityof execution nodes is assigned an equal or nearly equal number of tablesbased on the consistent hashing.

Example 19 is a method as in any of Examples 12-18, further comprisingcommitting the user file to a client account queue, and whereingenerating the ingest task comprises generating one or more ingest tasksbased on an amount of work in the client account queue, wherein theamount of work in the client account queue is determined based on one ormore of: an approximate size of the user file based on an average sizeof recently ingested user files from the client account; or a size ofthe user file as indicated by the client account.

Example 20 is a method as in any of Examples 12-19, wherein the data iscommitted to the target table by generating a new micro-partition forthe target table, wherein the new micro-partition is stored in theplurality of shared storage devices only after the data is fully andsuccessfully inserted.

Example 21 is a method as in any of Examples 12-20, wherein assigningthe task to the execution node of the execution platform furthercomprises managing a total number of tasks being processed by theexecution platform by on one or more of: delaying assigning the ingesttask to the execution node when a threshold number of tasks are alreadybeing processed by the execution platform; building optimally sizedmicro-partitions by delaying assigning the ingest task to the executionnode until a threshold number of new user files has been committed to aclient account queue; minimizing latency by assigning the ingest task tothe execution node as soon as the user files is committed to the clientaccount queue; or minimizing processing overhead of starting andstopping ingest tasks by delaying assigning the ingest task to theexecution node until a threshold number of new user files has beencommitted to the client account queue.

Example 22 is a method as in any of Examples 12-21, wherein managing thetotal number of tasks being processed by the execution platformcomprises balancing a plurality of latency factors to ensure customerlatency remains above a threshold level while the total number of tasksis minimized.

Example 23 is a processor that is programmable to execute instructionsstored in non-transitory computer readable storage media. Theinstructions include determining a notification indicating a presence ofa user file received from a client account to be ingested into adatabase. The instructions include identifying data in the user file andidentifying a target table of the database to receive the data in theuser file. The instructions include generating an ingest task indicatingthe data and the target table. The instructions include assigning theingest task to an execution node of an execution platform, wherein theexecution platform comprises a plurality of execution nodes operatingindependent of a plurality of shared storage devices collectivelystoring database data. The instructions include registering metadataconcerning the target table in a metadata store after the data has beenfully committed to the target table by the execution node.

Example 24 is a processor as in Example 23, wherein the instructionsfurther comprise committing the user file to a client account queue, andwherein determining the notification indicating the presence of the userfile comprises determining by polling the client account queue todetermine whether any new user files have been committed to the clientaccount queue since a last time the client account queue was polled.

Example 25 is a processor as in any of Examples 23-24, whereindetermining the notification indicating the presence of the user file isconfigured to determine by receiving a notification from a data lakeindicating the user file has been added.

Example 26 is a processor as in any of Examples 23-25, wherein theinstructions further comprise: identifying a current total number ofactive ingest tasks and a desired number of active ingest tasks; andmanaging the plurality of execution nodes of the execution platform suchthat the current total number of active ingest tasks is equal to orapproaches the desired number of active ingest tasks by one or more of:smoothing demand for the plurality of execution nodes over time by wayof a moving average; or maintaining an execution platform having morethan a required number of active execution nodes for processing thecurrent total number of active ingest tasks.

Example 27 is a processor as in any of Examples 23-26, wherein theinstructions further comprise generating an ingest history comprising anindication of whether data from one or more user files is successfullystored in the database, wherein the ingest history is stored in amicro-partition of a table of the database, and wherein the ingesthistory comprises one or more of a file name, a table identification, afile size, a row count, or an ingest error code.

Example 28 is a processor as in any of Examples 23-27, wherein theinstructions further comprise assigning the user file to an instance ofa resource manager based on consistent hashing, wherein a hash of theconsistent hashing is associated with the user file and the targettable, and wherein the instance of the resource manager is assigned tomanage processes for the hash associated with the target table.

Example 29 is a processor as in any of Examples 23-28, wherein theinstructions further comprise adding a new execution node to theexecution platform, wherein adding the new execution node comprisesdividing a plurality of hashes of the consistent hashing and assigningeach of the plurality of hashes to the plurality of execution nodes suchthat each execution node of the plurality of execution nodes is assignedan equal or nearly equal number of tables based on the consistenthashing.

Example 30 is a processor as in any of Examples 23-29, wherein theinstructions further comprise committing the user file to a clientaccount queue, and wherein generating the ingest task comprisesgenerating one or more ingest tasks based on an amount of work in theclient account queue, wherein the amount of work in the client accountqueue is determined based on one or more of: an approximate size of theuser file based on an average size of recently ingested user files fromthe client account; or a size of the user file as indicated by theclient account.

Example 31 is a processor as in any of Examples 23-30, wherein the datais committed to the target table by generating a new micro-partition forthe target table, wherein the new micro-partition is stored in theplurality of shared storage devices only after the data is fully andsuccessfully inserted.

Example 32 is a processor as in any of Examples 23-31, wherein assigningthe task to the execution node of the execution platform furthercomprises managing a total number of tasks being processed by theexecution platform by on one or more of: delaying assigning the ingesttask to the execution node when a threshold number of tasks are alreadybeing processed by the execution platform; building optimally sizedmicro-partitions by delaying assigning the ingest task to the executionnode until a threshold number of new user files has been committed to aclient account queue; minimizing latency by assigning the ingest task tothe execution node as soon as the user files is committed to the clientaccount queue; or minimizing processing overhead of starting andstopping ingest tasks by delaying assigning the ingest task to theexecution node until a threshold number of new user files has beencommitted to the client account queue.

Example 33 is a processor as in any of Examples wherein managing thetotal number of tasks being processed by the execution platformcomprises balancing a plurality of latency factors to ensure customerlatency remains above a threshold level while the total number of tasksis minimized.

In an embodiment of the disclosure, a system provides continuous dataingestion to a database or table. In such an embodiment, the systemincludes a client account comprising a data bucket. The client accountmay be attached to an S3 bucket that may be in communication with an SQSqueue. The SQS queue may be in communication with a plurality of pipes.The system may receive a notification that an alteration has been madeto the client data housed within the client's data bucket. The systemmay scale computing resources up and down as needed to accommodate thealteration made to the client data bucket. The system may automaticallypull in data changes and ingest the data into the client's database ortable. In an embodiment, the system automatically ingests data changeswithout receiving a specific command from a client account.

In an embodiment, the system automatically tracks data that haspreviously been ingested into a database table. The system may receive anotification from an S3 data bucket when a data file changes and comparethat notification against data that has previously been ingested.

In an embodiment, the system provides for incremental data ingestionthat protects against data loss if execution fails. In an embodiment,data is incrementally loaded such that data is automatically committedto the database after a certain number of native binary files has beenreached. The system may store the status of data in metadata such thatthe system stores data concerning exactly what file has been ingestedand at which position. In the event of execution failure, the system mayrestart from the file and position left off from previous ingestion andavoid re-ingesting data the system would do if a client account used anSQL command that failed midway, and the system may thereby avoidre-ingesting data.

1. A method comprising: obtaining, at a data system, an ingest requestto ingest one or more files into a table; after obtaining the ingestrequest and prior to the ingesting of the one or more files, persistingthe one or more files in a file queue that corresponds to the table;assigning the one or more files to one or more execution nodes to beingested into the table; operating an ingest poller to poll the filequeue; and ingesting, by the one or more execution nodes, the one ormore files into one or more micro-partitions of the table via one ormore pipes.
 2. The method of claim 1, wherein operating the ingestpoller further comprises: polling a queue associated with a clientaccount; inspecting a notification received from the queue; anddetermining at least one pipe, from the one or more pipes, that matchesthe notification.
 3. The method of claim 2, further comprising:delivering the notification to the at least one pipe; retrieving a filefrom the client account; and delivering the file to the at least onepipe.
 4. The method of claim 1, further comprising: associating the oneor more pipes with a notification channel, each of the one or more pipesbeing assigned one or more target tables; and directing file data from adata source to an applicable target table of the one or more assignedtarget tables.
 5. The method of claim 4, wherein notifications arereceived via the notification channel associated with the data source,the data source receiving files comprising file data to be ingested. 6.The method of claim 1, wherein the file queue further corresponds to aclient account, and the data system further comprises a second filequeue that corresponds to a second client account and a second table. 7.The method of claim 1, further comprising: registering metadata afterthe one or more files are ingested into the one or more micro-partitionsof the table, the metadata identifying the one or more files and the oneor more micro-partitions.
 8. The method of claim 1, wherein each of theone or more micro-partitions comprises contiguous units of storage of astorage device,
 9. The method of claim 1, wherein assigning the one ormore files to the one or more execution nodes to be ingested into thetable further comprises: generating an ingest task for each of the oneor more execution nodes, each generated ingest task identifying thetable and one or more of the one or more files; and assigning eachgenerated ingest task to an execution node in the one or more executionnodes, each generated ingest task comprising cutting a correspondingfile into one or more partitions, generating a new micro-partition basedon the corresponding file, or inserting the new micro-partition in aparticular table.
 10. The method of claim 9, wherein assigning eachgenerated ingest task to an execution node in the one or more executionnodes further comprises: assigning each generated ingest task to adifferent core of an execution node in the one or more execution nodes,each generated ingest task being single threaded.
 11. A systemcomprising: at least one processor; and one or more non-transitorycomputer readable storage media containing instructions executable bythe at least one processor for causing the at least one processor toperform operations comprising: obtaining, at a data system, an ingestrequest to ingest one or more files into a table; after obtaining theingest request and prior to the ingesting of the one or more files,persisting the one or more files in a file queue that corresponds to thetable; assigning the one or more files to one or more execution nodes tobe ingested into the table; operating an ingest pollen to poll the filequeue; and ingesting, by the one or more execution nodes, the one ormore files into one or more micro-partitions of the table via one ormore pipes.
 12. The system of claim 11, wherein operating the ingestpoller further comprises operations comprising: polling a queueassociated with a client account; inspecting a notification receivedfrom the queue; and determining at least one pipe, from the one or morepipes, that matches the notification.
 13. The system of claim 12,wherein the operations further comprise: delivering the notification tothe at least one pipe; retrieving a file from the client account; anddelivering the file to the at least one pipe.
 14. The system of claim11, further comprising: associating the one or more pipes with anotification channel, each of the one or more pipes being assigned oneor more target tables; and directing file data from a data source to anapplicable target table of the one or more assigned target tables. 15.The method of claim 4, wherein notifications are received via thenotification channel associated with the data source, the data sourcereceiving files comprising file data to be ingested.
 16. The method ofclaim 1, wherein the file queue further corresponds to a client account,and the data system further comprises a second file queue thatcorresponds to a second client account and a second table.
 17. Thesystem of claim 11, wherein the operations further comprise: registeringmetadata after the one or more files are ingested into the one or moremicro-partitions of the table, the metadata identifying the one or morefiles and the one or more micro-partitions.
 18. The system of claim 11,wherein each of the one or more micro-partitions comprises contiguousunits of storage of a storage device.
 19. The system of claim 11,wherein assigning the one or more files to the one or more executionnodes to be ingested into the table further comprises operationscomprising: generating an ingest task for each of the one or moreexecution nodes, each generated ingest task identifying the table andone or more of the one or more files; and assigning each generatedingest task to an execution node in the one or more execution nodes,each generated ingest task comprising cutting a corresponding file intoone or more partitions, generating a new micro-partition based on thecorresponding file, or inserting the new micro-partition in a particulartable.
 20. The system of claim 19, wherein assigning each generatedingest task to an execution node in the one or more execution nodesfurther comprises: assigning each generated ingest task to a differentcore of an execution node in the one or more execution nodes, eachgenerated ingest task being single threaded.
 21. A non-transitorycomputer readable storage media containing instructions executable by atleast one processor for causing the at least one processor to performoperations comprising: obtaining, at a database system, an ingestrequest to ingest one or more files into a table of a database; afterobtaining the ingest request and prior to the ingesting of the one ormore files, persisting the one or more files in a file queue thatcorresponds to the table; assigning the one or more files to one or moreexecution nodes to be ingested into the table; operating an ingestpoller to poll the file queue; and ingesting, by the one or moreexecution nodes, the one or more files into one or more micro-partitionsof the table via one or more pipes.
 22. The non-transitory computerreadable storage media of claim 21, wherein operating the ingest pollerfurther comprises operations comprising: polling a queue associated witha client account; inspecting a notification received from the queue; anddetermining at least one pipe, from the one or more pipes, that matchesthe notification.
 23. The non-transitory computer readable storage mediaof claim 22, wherein the operations further comprise: delivering thenotification to the at least one pipe; retrieving a file from the clientaccount; and delivering the file to the at least one pipe.
 24. Thenon-transitory computer readable storage media of claim 21, furthercomprising: associating the one or more pipes with a notificationchannel, each of the one or more pipes being assigned one or more targettables of the database; and directing file data from a database sourceto an applicable target table of the one or more assigned target tables.25. The non-transitory computer readable storage media of claim 24,wherein notifications are received via the notification channelassociated with the database source, the database source receiving filescomprising file data to be ingested into the database.
 26. Thenon-transitory computer readable storage media of claim 21, wherein thefile queue further corresponds to a client account, and the databasesystem further comprises a second file queue that corresponds to asecond client account and a second table.
 27. The non-transitorycomputer readable storage media of claim 21, wherein the operationsfurther comprise: registering metadata after the one or more files areingested into the one or more micro-partitions of the table, themetadata identifying the one or more files and the one or moremicro-partitions.
 28. The non-transitory computer readable storage mediaof claim 21, wherein each of the one or more micro-partitions comprisescontiguous units of storage of a storage device.
 29. The non-transitorycomputer readable storage media of claim 21, wherein assigning the oneor more files to the one or more execution nodes to be ingested into thetable further comprises operations comprising: generating an ingest taskfor each of the one or more execution nodes, each generated ingest taskidentifying the table and one or more of the one or more files; andassigning each generated ingest task to an execution node in the one ormore execution nodes, each generated ingest task comprising cutting acorresponding file into one or more partitions, generating a newmicro-partition based on the corresponding file, or inserting the newmicro-partition in a particular table.
 30. The non-transitory computerreadable storage media of claim 29, wherein assigning each generatedingest task to an execution node in the one or more execution nodesfurther comprises: assigning each generated ingest task to a differentcore of an execution node in the one or more execution nodes, eachgenerated ingest task being single threaded.